#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
简化的DeepSeek智能助手
直接使用LangChain ChatOpenAI，绕过复杂的Agent框架
"""

import os
import sys
import asyncio
import json
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

class SimpleDeepSeekAssistant:
    """简化的DeepSeek助手"""

    def __init__(self):
        self.llm = None
        self.conversation_history = []
        self.is_initialized = False

    async def initialize(self):
        """初始化助手"""
        try:
            print("初始化DeepSeek助手...")

            # 读取配置
            config_file = project_root / "config.json"
            if not config_file.exists():
                raise Exception("config.json文件不存在")

            with open(config_file, 'r', encoding='utf-8') as f:
                config = json.load(f)

            api_key = config.get('openai_api_key')
            api_base = config.get('openai_api_base')
            model = config.get('model', 'deepseek-chat')

            if not api_key:
                raise Exception("未找到API密钥")

            # 导入LangChain
            from langchain_openai import ChatOpenAI
            try:
                from langchain_core.prompts import ChatPromptTemplate
                from langchain_core.messages import HumanMessage, AIMessage
            except ImportError:
                # 如果导入失败，使用简单的字符串拼接
                ChatPromptTemplate = None

            # 创建LLM
            llm_config = {
                "api_key": api_key,
                "model": model,
                "temperature": 0.1
            }

            if api_base:
                llm_config["base_url"] = api_base

            self.llm = ChatOpenAI(**llm_config)
            self.is_initialized = True

            print(f"DeepSeek助手初始化成功 (模型: {model})")
            return True

        except Exception as e:
            print(f"初始化失败: {e}")
            return False

    async def process_query(self, query: str) -> dict:
        """处理查询"""
        try:
            if not self.is_initialized:
                return {
                    "content": "助手未初始化",
                    "success": False,
                    "error": "not_initialized"
                }

            print(f"处理查询: {query}")

            # 创建系统提示词
            system_prompt = """你是一个专业的云顶之弈智能助手，擅长回答各种问题。

你的能力包括：
1. 回答关于云顶之弈游戏的问题
2. 分析最新的科技趋势和新闻
3. 提供实用的建议和信息
4. 进行多轮对话

请用中文回答，回答要准确、有用、易于理解。"""

            # 创建对话模板
            if ChatPromptTemplate:
                prompt_template = ChatPromptTemplate.from_messages([
                    ("system", system_prompt),
                    ("human", "{input}"),
                ])
                # 格式化提示词
                prompt = prompt_template.format(input=query)
            else:
                # 简单的字符串拼接方式
                prompt = f"系统：{system_prompt}\n\n用户：{query}\n\n助手："

            # 调用API
            response = self.llm.invoke(prompt)

            # 记录对话历史
            self.conversation_history.append({
                "user": query,
                "assistant": response.content,
                "timestamp": str(asyncio.get_event_loop().time())
            })

            return {
                "content": response.content,
                "success": True,
                "model": "deepseek-chat"
            }

        except Exception as e:
            print(f"查询处理失败: {e}")
            return {
                "content": f"处理查询时出错: {str(e)}",
                "success": False,
                "error": str(e)
            }

    def get_conversation_count(self):
        """获取对话数量"""
        return len(self.conversation_history)

    def clear_history(self):
        """清空历史"""
        self.conversation_history.clear()

async def simple_chat():
    """简化聊天"""
    print("云顶之弈智能助手 - DeepSeek简化版")
    print("=" * 50)

    assistant = SimpleDeepSeekAssistant()

    # 初始化
    if not await assistant.initialize():
        print("助手初始化失败")
        return

    print("\n助手已就绪！开始对话吧")
    print("输入 '退出' 或 'q' 结束对话")
    print("-" * 50)

    while True:
        try:
            query = input("\n您的问题: ").strip()

            if not query:
                continue

            if query.lower() in ['退出', 'exit', 'q', 'quit']:
                print("感谢使用，再见！")
                break

            if query.lower() in ['帮助', 'help']:
                print_help()
                continue

            if query.lower() in ['状态', 'status']:
                print(f"对话数量: {assistant.get_conversation_count()}")
                print(f"助手状态: {'已初始化' if assistant.is_initialized else '未初始化'}")
                continue

            if query.lower() in ['清空', 'clear']:
                assistant.clear_history()
                print("对话历史已清空")
                continue

            # 处理查询
            print("DeepSeek正在思考...")
            result = await assistant.process_query(query)

            # 显示结果
            if result['success']:
                print(f"\nDeepSeek回答:")
                print(result['content'])
            else:
                print(f"\n处理失败: {result.get('content', '未知错误')}")

            print("\n" + "-" * 30)

        except EOFError:
            print("\n检测到输入结束，程序退出")
            break
        except KeyboardInterrupt:
            print("\n程序被用户中断")
            break
        except Exception as e:
            print(f"处理出错: {e}")
            break

def print_help():
    """打印帮助信息"""
    help_text = """
使用帮助：

基本命令：
- 输入任何问题开始对话
- '帮助' - 显示此帮助信息
- '状态' - 查看对话状态
- '清空' - 清空对话历史
- '退出' 或 'q' - 退出程序

查询示例：
- "云顶之弈基础规则是什么？"
- "当前版本什么阵容最强？"
- "分析一下AI的发展趋势"
- "推荐一些科技新闻"

DeepSeek优势：
- 高性价比的AI服务
- 优秀的中文理解能力
- 快速的响应速度
    """
    print(help_text)

if __name__ == "__main__":
    try:
        asyncio.run(simple_chat())
    except KeyboardInterrupt:
        print("\n程序结束")
    except Exception as e:
        print(f"程序异常: {e}")
        input("\n按回车键退出...")